package cn.edu.hit.core;

import java.util.stream.Stream;

/**
 * 适配器接口
 *
 * @param <ID>  原数据的ID的类型
 * @param <ARG> 转换函数所需的额外参数的类型
 * @param <R>   转换后的结果类型
 * @param <C>   配置类型
 */
public interface Adapter<ID, ARG, R, C> {
    /**
     * 是否接受该类型的数据输入
     *
     * @param type 数据类型
     * @return
     */
    boolean accept(String type);

    /**
     * 适配、转换函数
     *
     * @param id     源数据
     * @param config 配置定义
     * @return 数据转换结果
     */
    void register(ID id, C config);

    Stream<R> service(ARG arg);

    void clear();

    String VALUE = "value";
    String TIMESTAMP = "timestamp";
}